package main

import (
	"fmt"
)

//演示结构体的四种定义方式
//分为 结构体 和 结构体指针
func main() {
	//定义结构体的几种方式：
	//1.
	var p1 Person
	fmt.Println(p1)
	fmt.Println(p1.Name == "")
	fmt.Println(p1.Age == 0)

	//2.
	var p2 Person = Person{"luffy", 22}
	fmt.Println(p2)

	//3. 结构体指针
	p3 := new(Person)
	//注意p3是一个指针 那么指针要怎么对字段赋值呢
	//方式1，也就是最正常的方式
	//先通过 取值 运算符 得到实际的结构
	var p3Struct = *p3
	p3Struct.Age = 100
	p3Struct.Name = "路飞"
	fmt.Println(p3Struct)

	//方式2: golang进行了优化，可以直接通过 结构体指针名直接使用字段
	p3.Age = 200
	p3.Name = "乔巴"
	fmt.Println(*p3)

	//4.结构体指针
	p4 := &Person{"Bob", 255}
	fmt.Println(*p4)

}

type Person struct {
	Name string //默认值 ""
	Age  uint8  //默认值 0
}
